package 数据结构和算法入门计划8月开始;

import java.util.HashMap;
import java.util.Map;

// https://leetcode-cn.com/problems/roman-to-integer/
public class 罗马数字转整数130821会 {
    class Solution {
        public int romanToInt(String s) {
            int sum=0;
            int n=s.length();
            for(int i=0;i<n;i++){
                if(s.charAt(i)==('M'))
                    sum+=1000;
                if(s.charAt(i)=='D')
                    sum+=500;
                if(s.charAt(i)=='C')
                {
                    sum+=100;
                    if(i!=n-1)
                    {
                        if(s.charAt(i+1)=='D')
                            sum-=200;
                        if(s.charAt(i+1)=='M')
                            sum-=200;
                    }
                }
                if(s.charAt(i)=='L')
                    sum+=50;
                if(s.charAt(i)=='X')
                {
                    sum+=10;
                    if(i!=n-1)
                    {
                        if(s.charAt(i+1)=='L')
                            sum-=20;
                        if(s.charAt(i+1)=='C')
                            sum-=20;
                    }
                }
                if(s.charAt(i)=='V')
                    sum+=5;
                if(s.charAt(i)=='I')
                {
                    sum+=1;
                    if(i!=n-1)
                    {
                        if(s.charAt(i+1)=='V')
                            sum-=2;
                        if(s.charAt(i+1)=='X')
                            sum-=2;
                    }
                }
            }
            return sum;
        }
    }

    class Solution2 {
        Map<Character, Integer> symbolValues = new HashMap<Character, Integer>() {{
            put('I', 1);
            put('V', 5);
            put('X', 10);
            put('L', 50);
            put('C', 100);
            put('D', 500);
            put('M', 1000);
        }};

        public int romanToInt(String s) {
            int ans = 0;
            int n = s.length();
            for (int i = 0; i < n; ++i) {
                int value = symbolValues.get(s.charAt(i));
                if (i < n - 1 && value < symbolValues.get(s.charAt(i + 1))) {
                    ans -= value;
                } else {
                    ans += value;
                }
            }
            return ans;
        }
    }

}
